/**
 * Description:
 * Class Name:FinalizeTest
 * Date:2022/2/13 11:42
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第6章_面向对象_下._6_10_对象与垃圾回收._6_10_3_finalize方法;

public class FinalizeTest {
    private static FinalizeTest ft = null;
    public void info(){
        System.out.println("测试资源清理的finalize方法");
    }

    public static void main(String[] args) throws Exception{
        // 创建FinalizeTest对象后不给它引用变量，则会立即进入可恢复状态
        new FinalizeTest();
        // 通知系统进行强制垃圾回收
//        System.gc();                                    // ①
        // 强制垃圾回收机制调用可恢复对象的finalize()方法
//        Runtime.getRuntime().runFinalization();         // ②
        System.runFinalization();                       // ③
        ft.info();
    }
    public void finalize(){
        // 让ft引用到试图回收的可恢复对象，即可恢复对象重写变成可达状态
        System.out.println("让ft引用到试图回收的可恢复对象，即可恢复对象重写变成可达状态");
        ft = this;
    }
}
